home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / BPL70N16 / TESTPRGS.ZIP / ARITEST.PAS next >
Pascal/Delphi Source File  |  1993-03-07  |  6KB  |  225 lines

  1. PROGRAM AriTest;   { Copyright (c) 1990-1993 Norbert Juffa }
  2.  
  3. { Aritest tests the speed of the REAL arithmetic software routines. }
  4.  
  5. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  6.  
  7. USES Time;
  8.  
  9. VAR L: INTEGER;
  10.     I, J, ExecutionTime,
  11.     StorageTime, StorageTime2,
  12.     StorageTime3, Start: LONGINT;
  13.     X, Y, Z: REAL;
  14.     A, B, C: ARRAY [1..2900] OF REAL;
  15.     D: ARRAY [1..2900] OF LONGINT;
  16.  
  17.  
  18. FUNCTION Draw: INTEGER;
  19. BEGIN
  20.   IF Random < 0.5 THEN
  21.     Draw := -1
  22.   ELSE
  23.     Draw := 1;
  24. END;
  25.  
  26. BEGIN
  27.    WriteLn;
  28.    WriteLn ('Time for basic arithmetic functions');
  29.    WriteLn;
  30.    Write   ('Operation             │   Time TP ');
  31. {$IFDEF VER55}
  32.    Write   ('5.5');
  33. {$ENDIF}
  34. {$IFDEF VER50}
  35.    Write   ('5.0');
  36. {$ENDIF}
  37. {$IFDEF VER60}
  38.    Write   ('6.0');
  39. {$ENDIF}
  40. {$IFDEF VER70}
  41.    Write   ('7.0');
  42. {$ENDIF}
  43.    WriteLn;
  44.    WriteLn ('──────────────────────┼───────────────');
  45.  
  46.    RandSeed := 13;
  47.  
  48.    Write ('Please wait! Initializing ...');
  49.  
  50.    FOR L := 1 TO 2900 DO BEGIN
  51.       A [L] := Exp (Random * 80-40);
  52.    END;
  53.    FOR L := 1 TO 2900 DO BEGIN
  54.       B [L] := Exp (Random * 8.8-4.4) * Draw;
  55.    END;
  56.    FOR L := 1 TO 2900 DO BEGIN
  57.       C [L] := Exp (Random * 30 - 15) * Draw;
  58.    END;
  59.    FOR L := 1 TO 2900 DO BEGIN
  60.  
  61.       D [L] := round (C[L]);
  62.       IF D [L] = 0 THEN
  63.          Inc (D[L]);
  64.    END;
  65.  
  66.    Write (#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8);
  67.  
  68.    Start := Clock;
  69.    FOR L := 1 TO 2900 DO BEGIN
  70.       I := J;
  71.    END;
  72.    StorageTime3 := Clock - Start;
  73.  
  74.    Start := Clock;
  75.    FOR L := 1 TO 2900 DO BEGIN
  76.       Y := X;
  77.    END;
  78.    StorageTime := Clock - Start;
  79.  
  80.    Start := Clock;
  81.    FOR L := 1 TO 2900 DO BEGIN
  82.       Y := X;
  83.       X := Y;
  84.    END;
  85.    StorageTime2 := Round (0.75*(Clock - Start));
  86.  
  87.    Start := Clock;
  88.    FOR L := 1 TO 2900 DO BEGIN
  89.       I := (D [L] * D [2901-L]);
  90.    END;
  91.    ExecutionTime := Clock - Start - StorageTime3;
  92.    WriteLn ('LONG-Mul              │', ExecutionTime/2.9:11:1, ' µs');
  93.    Start := Clock;
  94.    FOR L := 1 TO 2900 DO BEGIN
  95.       I := (D [L] DIV D [2901-L]);
  96.    END;
  97.    ExecutionTime := Clock - Start - StorageTime3;
  98.    WriteLn ('LONG-Div              │', ExecutionTime/2.9:11:1, ' µs');
  99.    Start := Clock;
  100.    FOR L := 1 TO 2900 DO BEGIN
  101.       I := Abs (D [L]);
  102.    END;
  103.    ExecutionTime := Clock - Start - StorageTime3;
  104.    WriteLn ('LONG-Abs              │', ExecutionTime/2.9:11:1, ' µs');
  105.  
  106.  
  107.    Start := Clock;
  108.    FOR L := 1 TO 2900 DO BEGIN
  109.       Y := D [L];
  110.    END;
  111.    ExecutionTime := Clock - Start - StorageTime;
  112.    WriteLn ('REAL-Float            │', ExecutionTime/2.9:11:1, ' µs');
  113.    Start := Clock;
  114.    FOR L := 1 TO 2900 DO BEGIN
  115.       Y := (C [L] + C [2901-L]);
  116.    END;
  117.    ExecutionTime := Clock - Start - StorageTime2;
  118.    WriteLn ('REAL-Add              │', ExecutionTime/2.9:11:1, ' µs');
  119.    Start := Clock;
  120.    FOR L := 1 TO 2900 DO BEGIN
  121.       Y := (C [L] - C [2901-L]);
  122.    END;
  123.    ExecutionTime := Clock - Start - StorageTime2;
  124.    WriteLn ('REAL-Sub              │', ExecutionTime/2.9:11:1, ' µs');
  125.    Start := Clock;
  126.    FOR L := 1 TO 2900 DO BEGIN
  127.       Y := (C [L] * C [2901-L]);
  128.    END;
  129.    ExecutionTime := Clock - Start - StorageTime2;
  130.    WriteLn ('REAL-Mul              │', ExecutionTime/2.9:11:1, ' µs');
  131.    FOR L := 1 TO 2900 DO BEGIN
  132.       D [L] := D [L] DIV 7440;
  133.    END;
  134.    Start := Clock;
  135.    FOR L := 1 TO 2900 DO BEGIN
  136.       Y := (C [L] * D [2901-L]);
  137.    END;
  138.    ExecutionTime := Clock - Start - StorageTime2;
  139.    WriteLn ('REAL-Mul (Short)      │', ExecutionTime/2.9:11:1, ' µs');
  140.    Start := Clock;
  141.    FOR L := 1 TO 2900 DO BEGIN
  142.       Y := (C [L] / C [2901-L]);
  143.    END;
  144.    ExecutionTime := Clock - Start - StorageTime2;
  145.    WriteLn ('REAL-Div              │', ExecutionTime/2.9:11:1, ' µs');
  146.    Start := Clock;
  147.    FOR L := 1 TO 2900 DO BEGIN
  148.       Y := Sqr(C [L]);
  149.    END;
  150.    ExecutionTime := Clock - Start - StorageTime;
  151.    WriteLn ('REAL-Sqr              │', ExecutionTime/2.9:11:1, ' µs');
  152.    FOR L := 1 TO 2900 DO BEGIN
  153.       C [L] := D [L];
  154.    END;
  155.    Start := Clock;
  156.    FOR L := 1 TO 2900 DO BEGIN
  157.       Y := Sqr(C [L]);
  158.    END;
  159.    ExecutionTime := Clock - Start - StorageTime;
  160.    WriteLn ('REAL-Sqr (Short)      │', ExecutionTime/2.9:11:1, ' µs');
  161.    FOR L := 1 TO 2900 DO BEGIN
  162.       C [L] := Exp (Random * 20 - 10) * Draw;
  163.    END;
  164.    Start := Clock;
  165.    FOR L := 1 TO 2900 DO BEGIN
  166.       Y := Int ( C[L]);
  167.    END;
  168.    ExecutionTime := Clock - Start - StorageTime;
  169.    WriteLn ('REAL-Int              │', ExecutionTime/2.9:11:1, ' µs');
  170.    Start := Clock;
  171.    FOR L := 1 TO 2900 DO BEGIN
  172.       Y := Frac (C [L]);
  173.    END;
  174.    ExecutionTime := Clock - Start - StorageTime;
  175.    WriteLn ('REAL-Frac             │', ExecutionTime/2.9:11:1, ' µs');
  176.    Start := Clock;
  177.    FOR L := 1 TO 2900 DO BEGIN
  178.       I := Trunc (C [L]);
  179.    END;
  180.    ExecutionTime := Clock - Start - StorageTime3;
  181.    WriteLn ('REAL-Trunc            │', ExecutionTime/2.9:11:1, ' µs');
  182.    Start := Clock;
  183.    FOR L := 1 TO 2900 DO BEGIN
  184.       I := Round (C [L]);
  185.    END;
  186.    ExecutionTime := Clock - Start - StorageTime3;
  187.    WriteLn ('REAL-Round            │', ExecutionTime/2.9:11:1, ' µs');
  188.    Start := Clock;
  189.    FOR L := 1 TO 2900 DO BEGIN
  190.       Y := Sqrt (A [L]);
  191.    END;
  192.    ExecutionTime := Clock - Start - StorageTime;
  193.    WriteLn ('REAL-Sqrt             │', ExecutionTime/2.9:11:1, ' µs');
  194.    Start := Clock;
  195.    FOR L := 1 TO 2900 DO BEGIN
  196.       Y := Ln  (A [L]);
  197.    END;
  198.    ExecutionTime := Clock - Start - StorageTime;
  199.    WriteLn ('REAL-Ln               │', ExecutionTime/2.9:11:1, ' µs');
  200.    Start := Clock;
  201.    FOR L := 1 TO 2900 DO BEGIN
  202.       Y := Exp (B [L]);
  203.    END;
  204.    ExecutionTime := Clock - Start - StorageTime;
  205.    WriteLn ('REAL-Exp              │', ExecutionTime/2.9:11:1, ' µs');
  206.    Start := Clock;
  207.    FOR L := 1 TO 2900 DO BEGIN
  208.       Y := Sin (B[L]);
  209.    END;
  210.    ExecutionTime := Clock - Start - StorageTime;
  211.    WriteLn ('REAL-Sin              │', ExecutionTime/2.9:11:1, ' µs');
  212.    Start := Clock;
  213.    FOR L := 1 TO 2900 DO BEGIN
  214.       Y := Cos (B[L]);
  215.    END;
  216.    ExecutionTime := Clock - Start - StorageTime;
  217.    WriteLn ('REAL-Cos              │', ExecutionTime/2.9:11:1, ' µs');
  218.    Start := Clock;
  219.    FOR L := 1 TO 2900 DO BEGIN
  220.       Y := ArcTan (C[L]);
  221.    END;
  222.    ExecutionTime := Clock - Start - StorageTime;
  223.    WriteLn ('REAL-ArcTan           │', ExecutionTime/2.9:11:1, ' µs');
  224. END. { AriTest }
  225.